Ecco una proposta architetturale e implementativa per un plugin GLPI 11 dedicato al backup e versioning delle configurazioni di rete, strutturata secondo le linee guida ufficiali degli sviluppatori GLPI (PHP 8.2+, namespace PSR-4, Twig 3, API REST, hook moderni).
🧱 1. Architettura del Plugin
12345678910111213141516171819
🗄️ 2. Schema Database (MySQL/MariaDB)
GLPI 11 usa InnoDB con charset utf8mb4. Il plugin creerà:
sql
12345678910111213
networkdevices_id punta a glpi_networkdevices
is_encrypted indica se il contenuto è cifrato con Glpi\Toolbox\Encryption
Il versioning si ottiene confrontando config_hash all'arrivo di un nuovo backup
🔐 3. Gestione Profili e Diritti (GLPI Native)
Il plugin si integra con il sistema dei profili di GLPI senza reinventare l'ACL.
src/Config.php
php
123456789101112131415161718192021
setup.php
php
1234567891011
I diritti vengono esposti automaticamente in Amministrazione > Profili.
⚡ 4. Massive Actions
GLPI 11 supporta le massive actions tramite hook e metodi nativi.
hook.php
php
123456789
Nella classe Config:
php
1234567891011121314151617181920
🌐 5. Recupero Configurazione: Agent GLPI vs Alternative
✅ Opzione Richiesta: GLPI Agent Remoto
GLPI Agent (ex FusionInventory) supporta task personalizzate in Python/Perl.
Flusso consigliato:
Il plugin espone un endpoint API: POST /api.php/plugin/netconfig/receive
L'agent esegue un task netconfig_backup (Python con netmiko/napalm o expect)
L'agent invia JSON: {"device_id": 12, "config": "...", "checksum": "sha256..."}
GLPI valida, confronta hash, cifra se necessario, salva e registra versione
Endpoint API (src/Agent/Task/Backup.php)
php
123456789101112131415161718192021222324252627282930
⚠️ Considerazioni Critiche sull'Agent
GLPI Agent non è nativamente progettato per backup di rete. Richiede sviluppo di un modulo custom (Python) con gestione timeout, fallback, credential secure (vault/keystore).
Alternative più solide in produzione:
Oxidized + webhook verso GLPI API
RANCID/Unconfigured + cron + import CSV/API
GLPI + phpseclib3 (SSH diretto, ma sconsigliato per scaling/sicurezza)
💡 Raccomandazione: Usa l'agent per trigger e orchestrazione, ma delega il retrieval a netmiko/napalm in esecuzione sull'agent stesso. Mantieni le credenziali nel sistema di secrets dell'agent o in GLPI cifrate.
📜 6. Tracciamento Variazioni e Diff
Ogni backup viene hashato (SHA256)
Se l'hash differisce dall'ultimo, si crea nuova riga
Per visualizzare il diff: usa symfony/diff o myclabs/php-diff
Esempio integrazione Twig:
twig
12345
Nel controller:
php
12345
📥 7. Esportazione Sicura
Verifica diritti: Session::haveRight(Config::class, READ)
Stream diretto con header corretti
Rimuovi/cripta password sensibili prima dell'export (opzionale ma consigliato)
ajax/export.php
php
1234567891011121314
🛣️ 8. Roadmap di Sviluppo
Fase
Attività
Tempo Stimato
1
Scaffold plugin, setup/hook, schema DB, migration
2 gg
2
CRUD Config, integrazione menu, template Twig
3 gg
3
Diritti profili, massive actions, API endpoint
2 gg
4
Logica hash, versioning, diff HTML
2 gg
5
Export sicuro, cifratura, test unitari
2 gg
6
Modulo Agent GLPI (Python) o integrazione Oxidized
3-5 gg
7
Documentazione, package, test GLPI 11 QA
2 gg
⚠️ Note Critiche per GLPI 11
Namespace PSR-4 obbligatorio: PluginNetconfig\ mappato su src/
Cifratura: Usa Glpi\Toolbox\Encryption (AES-256-GCM) con chiave in GLPI_CONFIG_DIR/config_db.php o variabile d'ambiente
API REST: GLPI 11 richiede dichiarazione esplicita degli endpoint plugin via add_api_endpoint o routing custom
Performance: Configurazioni switch/router possono superare 500KB. Usa MEDIUMTEXT e indicizza per ricerca
Sicurezza: Non esporre endpoint /ajax/retrieve.php senza CSRF+token. Preferisci l'agent o l'API con autenticazione app token
Compatibilità: Dichiara in setup.php: $PLUGIN_HOOKS['compatible']['netconfig'] = ['glpi' => '>=11.0'];
📦 Dipendenze Composer Consigliate
json
123456789101112

